package vip.liux.backend.application.service.pay;

import vip.liux.application.dots.PagedResultDto;
import vip.liux.backend.application.service.pay.dto.notify.PayNotifyTaskDetailDto;
import vip.liux.backend.application.service.pay.dto.notify.PayNotifyTaskDto;
import vip.liux.backend.application.service.pay.dto.notify.PayNotifyTaskQueryDto;
import vip.liux.contracts.shared.enums.pay.PayNotifyType;

/**
 * 回调通知 Service 接口
 *
 * @author 芋道源码
 */
public interface PayNotifyService {

    /**
     * 创建回调通知任务
     *
     * @param type   类型
     * @param dataNo 数据编号
     */
    void createPayNotifyTask(PayNotifyType type, String dataNo);

    /**
     * 执行回调通知
     * <p>
     * 注意，该方法提供给定时任务调用。目前是 backend 进行调用
     *
     * @return 通知数量
     */
    int executeNotify() throws InterruptedException;

    /**
     * 获得回调通知
     *
     * @param id 编号
     * @return 回调通知
     */
    PayNotifyTaskDto getNotifyTask(Long id);

    /**
     * 获得回调通知分页
     *
     * @param input 分页查询
     * @return 回调通知分页
     */
    PagedResultDto<PayNotifyTaskDto> getNotifyTaskPage(PayNotifyTaskQueryDto input);

    /**
     * 获得回调日志列表
     *
     * @param id 任务编号
     * @return 日志列表
     */
    PayNotifyTaskDetailDto getNotifyTaskDetail(Long id);
}
